/**
 * @file analysesyntaxique.h
 * @author Florian Castellane <florian.castellane@grenoble-inp.org>
 * @author Christian Proust <christian.proust@phelma.grenoble-inp.fr>
 * @date Sun Oct 07 18:18:00 2012
 * @brief Fonctions d'analyse syntaxique.
 */

#include "gestiondetypes.h"

#ifndef ANALYSESYNTAXIQUE_H_INCLUDED
#define ANALYSESYNTAXIQUE_H_INCLUDED

/// Définition des états de la machine à états
/*
enum
{
    STATUT_INITIALISATION,
    STATUT_DEPART,
    STATUT_DIRECTIVE_0,
    STATUT_DIRECTIVE_0_1,
    STATUT_DIRECTIVE_1,
    STATUT_DIRECTIVE_1_1,
    STATUT_ETIQUETTE,
    STATUT_SYMBOLE_1,
    STATUT_SYMBOLE_1_0,
    STATUT_SYMBOLE_1_1
} ;
*/

LISTE analyse_lexicale_liste_lexemes(LISTE liste_lexemes);
void separer_liste_lexeme(LISTE originale, LISTE *text_init, LISTE *data_init);
int fonction_inter_separer_liste(LISTE* pindex);
int fonction_zone_separer_liste(LISTE* pindex,int * pzone);

void recuperer_tableau_instruct_ASM(LISTE texte, LISTE *petiquette, LIGNE_INSTRUCT_ASM   **tt_instruct  ,  INSTRUCTION instruction[] );
int* recuperer_nombre__recuperer_tableau_instruct_ASM(LISTE index);
int choix_type_recuperer_tableau_instruct_ASM(LISTE index);
void erreur_recuperer_tableau_instruct_ASM(LISTE index);
LISTE ajout_queue_etiquette(LISTE Liste_init,char * nom_init, unsigned int num_ligne, int type);
unsigned int compter_nombre_ligne(TYPE_DE_LEXEME premier, LISTE texte);
int identif_instruction(INSTRUCTION* instruction, char* chaine, unsigned int numerodeligne);

void main_analysesyntaxique(LISTE L_lexeme, INSTRUCTION instruction[], char * fichier_l, char * fichier_obj);

LISTE ajout_queue_instruction(LISTE init, LISTE * pL, int * STATUT, int taille_max);

int compte_nb_virgule(LISTE index);
LISTE ajout_queue_data(LISTE init, LISTE * pL);
TYPE_DE_DIRECTIVE identif_directive(char* nom);
LIGNE_DIRECTIVE_ASM * recuperer_tableau_data_ASM(LISTE data, LISTE *petiquette, LIGNE_DIRECTIVE_ASM **tt_directive);

unsigned int num_registre(ELEMENT_LEXEME lexeme);


#endif // ANALYSESYNTAXIQUE_H_INCLUDED
